package javase.ch02.homeWork.Test2;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class CallableDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        /*多线程的第三种实现方式：
        特点：可以获取到多线程运行的结果
        1.创建一个类MyCal1able实现cal1able接口
        2.重写ca11（是有返回值的，表示多线程运行的结果）
        3.创建MyCallable的对象（表示多线程要执行的任务）
        4. 创建FutureTask的对象（作用管理多线程运行的结果）
        5.创建Thread类的对象，并启动（表示线程）*/

        /*MyCalleable mc = new MyCalleable();
        FutureTask<Integer> ft = new FutureTask<>(mc);
        Thread t1 = new Thread(ft);
        t1.start();

        Integer i = ft.get();
        System.out.println(i);*/

       //使用lambda表达式创建Callable对象
        Callable<Integer> c = () -> {
            int sum = 0;
            //求和
            for (int i = 1; i <= 100; i++) {
                sum += i;
            }
            return sum;
        };
        FutureTask<Integer> ft = new FutureTask<>(c);
        Thread t1 = new Thread(ft);
        t1.start();
        Integer i = ft.get();
        System.out.println(i);

    }

}

/*class MyCalleable implements Callable<Integer>{

    @Override
    public Integer call() throws Exception {
        int sum = 0;
        //求和
        for (int i = 1; i <=100; i++) {
            sum += i;
        }
        return sum;
    }
}*/
